X-Plane B737-800 Arduinoプログラミング
このプロジェクトは、ArduinoによるX-Plane B737-800 のオートパイロットパネルのプログラムです。
このまま、コピーしてArduinoに貼り込んだら使えます。
ただし、TeensyControlsプラグインとArduinoにTeensyduinoをインストールが完了していることが必要です。

このプラグラムはX-Plaenのコマンドを使用して作成していますのでほとんど完全に動作しています。しかし完璧でない部分もあるかもしれません。
是非皆さんも勉強のつもりでバグの修正をお願いします。
それでよかったら、このプログラムを使っていただきたいとおもいます。
Boing 737-800 Auto Pilot.ino

  //B737-800 専用
  //2018年5月24日 作製開始
  //daataref は void setup() に記述されている。
  
  #include <Encoder.h>
  #include <Bounce.h>
  #include <LedControl.h>
  #include <Encoder.h>
  #undef round   //なくても動作する
  
  /////////////////////////////////////////////////////////////////////////
  // 74HC595(LED表示)シフトレジスタ 共通スクリプト //
  /////////////////////////////////////////////////////////////////////////
  int SER_dataPin = 43;   //pin 14(DS-data) on the 75HC595
  int RCLK_latchPin = 44;  //pin 12(ST_CP-latch) on the 75HC595
  int SRCLK_clockPin = 45; //pin 11(SH_CP-clock) on the 75HC595

  #define number_of_74hc595s 3    //シフトレジスタ74HC595の数
  #define numOfRegisterPins number_of_74hc595s * 8    //ここは変更しないこと
  boolean registers[numOfRegisterPins];  //上のレジスタの数を反映させる共通スクリプト
  
  void clearRegisters(){
    for(int i = numOfRegisterPins - 1; i >=  0; i--){
       registers[i] = LOW;  //最初にLEDを全消灯(LOW)、LED点灯確認はHIGHにするとわかる(X-Planeは起動しないこと)
                           //確認の為にスタート時にLEDをON,完全にX-Planeが起動したらOFFになる。
    }
  }

  void writeRegisters(){
    digitalWrite(RCLK_latchPin, LOW);
    for(int i = numOfRegisterPins - 1; i >=  0; i--){
      digitalWrite(SRCLK_clockPin, LOW);
      int val = registers[i];
      digitalWrite(SER_dataPin, val);
      digitalWrite(SRCLK_clockPin, HIGH);
    }
    digitalWrite(RCLK_latchPin, HIGH);
  }
  // 個々のピンをHIGかLOWに設定する
  void setRegisterPin(int index, int value){  //indexでピン位置、valueでLOWかHIGH
    registers[index] = value;
  }
  // 74HC595(LED表示)シフトレジスタ共通ここまで ///////////////////////////////
  
  elapsedMillis inactivityTimeout;// 無活動タイムアウト
  
  
  
  
  /////////////////////////////////////////////////////////////////////////
  /////////// スイッチ Teensy++2.0 直結ピン //////////////////
  /////////////////////////////////////////////////////////////////////////
  //===============================================================================================
  /////////// 0番 F/D プッシュスイッチ(コマンド)//////////////////
  //===============================================================================================
  const int FDSwPin = 0;                    //teensy 0ピン
  Bounce FDSwitch = Bounce (FDSwPin, 100);    //チャタリング除去のためここだけ数値を上げている
  FlightSimCommand FD_Sw;
  //===============================================================================================
  /////////// 1番 A/T ARM プッシュスイッチ(コマンド)//////////////////
  //===============================================================================================
  const int ATarmSwPin = 1;                  //teensy 1ピン
  Bounce ATarmSwitch = Bounce(ATarmSwPin, 5);
  FlightSimCommand AutoThrottleARM_Sw;
  //===============================================================================================
  /////////// 2番 N1 プッシュスイッチ(コマンド)//////////////////
  //===============================================================================================
  const int N1SwPin = 2;                     //teensy 2ピン
  Bounce N1Switch = Bounce(N1SwPin, 5);        
  FlightSimCommand N1_Sw;
  //===============================================================================================
  /////////// 3番 SPEED プッシュスイッチ(コマンド)//////////////////
  //===============================================================================================
  const int SPEEDSwPin = 3;                     //teensy 3ピン
  Bounce SPEEDSwitch = Bounce(SPEEDSwPin, 5);        
  FlightSimCommand SPEED_Sw;
  //===============================================================================================
  /////////// 4番 VNAV プッシュスイッチ(コマンド)//////////////////
  //===============================================================================================
  const int VNAVSwPin = 4;                     //teensy 4ピン
  Bounce VNAVSwitch = Bounce(VNAVSwPin, 5);        
  FlightSimCommand VNAV_Sw;
  //===============================================================================================
  /////////// 5番 LVL CHG プッシュスイッチ(コマンド)//////////////////
  //===============================================================================================
  const int LVL_CHGSwPin = 5;                     //teensy 5ピン
  Bounce LVL_CHGSwitch = Bounce(LVL_CHGSwPin, 5);        
  FlightSimCommand LVL_CHG_Sw;
  //===============================================================================================
  /////////// 14番 C/O プッシュスイッチ(整数型dataref)//////////////////
  //===============================================================================================
  //6番ピン(LED点滅)の動作がおかしいので26ピンに変更した。
  const int COSwPin = 26;                     //teensy 14ピン
  Bounce COSwitch = Bounce(COSwPin, 5);        
  FlightSimCommand CO_Sw;
  //===============================================================================================
  /////////// 14番 SPD INTV プッシュスイッチ //////////////////
  //===============================================================================================
  //6番ピン(LED点滅)の動作がおかしいので26ピンに変更した。
  const int SPD_INTVSwPin = 26;                     //teensy 14ピン
  Bounce SPD_INTVSwitch = Bounce(SPD_INTVSwPin, 5);        
  FlightSimCommand SPD_INTV_Sw;
  //===============================================================================================
  /////////// Part-B HDG SEL プッシュスイッチ(コマンド)//////////////////
  //===============================================================================================
  const int HDG_SELSwPin = 11;                     //teensy 6ピン
  Bounce HDG_SELSwitch = Bounce(HDG_SELSwPin, 5);        
  FlightSimCommand HDG_SEL_Sw;
  //===============================================================================================
  /////////// Part-B LNAV プッシュスイッチ(コマンド)//////////////////
  //===============================================================================================
  const int LNAVSwPin = 12;                     //teensy 7ピン
  Bounce LNAVSwitch = Bounce(LNAVSwPin, 5);        
  FlightSimCommand LNAV_Sw;
  //===============================================================================================
  /////////// Part-B VCR LOC プッシュスイッチ(コマンド)//////////////////
  //===============================================================================================
  const int VOR_LOCSwPin = 13;                     //teensy 8ピン
  Bounce VOR_LOCSwitch = Bounce(VOR_LOCSwPin, 5);        
  FlightSimCommand VOR_LOC_Sw;
  //===============================================================================================
  /////////// Part-B APP プッシュスイッチ(コマンド)//////////////////
  //===============================================================================================
  const int APPSwPin = 14;                     //teensy 9ピン
  Bounce APPSwitch = Bounce(APPSwPin, 5);        
  FlightSimCommand APP_Sw;
  //===============================================================================================
  /////////// Part-B BANK ANGLE 5モード切り替え スイッチ //////////////////
  //===============================================================================================
  int BankAngle_up_SwPin = 15;
  Bounce BankAngle_up_SwitchPin = Bounce (BankAngle_up_SwPin, 5);
  FlightSimCommand BankAngle_up;
  
  int BankAngle_dn_SwPin = 27;
  Bounce BankAngle_dn_SwitchPin = Bounce (BankAngle_dn_SwPin, 5);
  FlightSimCommand BankAngle_dn;
  //===============================================================================================
  /////////// 10番 ALT HOLD プッシュスイッチ(コマンド)//////////////////
  //===============================================================================================
  const int ALT_HOLDSwPin = 18;                     //teensy 10ピン
  Bounce ALT_HOLDSwitch = Bounce(ALT_HOLDSwPin, 5);        
  FlightSimCommand ALT_HOLD_Sw;
  //===============================================================================================
  /////////// 11番 V/S プッシュスイッチ(コマンド)//////////////////
  //===============================================================================================
  const int VSSwPin = 19;                     //teensy 11ピン
  Bounce VSSwitch = Bounce(VSSwPin, 5);        
  FlightSimCommand VS_Sw;
  //===============================================================================================
  /////////// 12番 A/P ENGAGE CMD プッシュスイッチ(コマンド)//////////////////
  //===============================================================================================
  const int AP_ENGAGE_CMDSwPin = 20;                     //teensy 12ピン
  Bounce AP_ENGAGE_CMDSwitch = Bounce(AP_ENGAGE_CMDSwPin, 5);        
  FlightSimCommand AP_ENGAGE_CMD_Sw;
  //===============================================================================================
  /////////// 13番 DISENGAGE プッシュスイッチ(コマンド)//////////////////
  //===============================================================================================
  const int DISENGAGESwPin = 21;                     //teensy 13ピン
  Bounce DISENGAGESwitch = Bounce(DISENGAGESwPin, 5);        
  FlightSimCommand DISENGAGE_Sw;
  //===============================================================================================
  /////////// 14番 ALT INTV プッシュスイッチ //////////////////
  //===============================================================================================
  //6番ピン(LED点滅)の動作がおかしいので26ピンに変更した。
  const int ALT_INTVSwPin = 26;                     //teensy 14ピン
  Bounce ALT_INTVSwitch = Bounce(ALT_INTVSwPin, 5);        
  FlightSimCommand ALT_INTV_Sw;
  
  
  
  
  
  /////////////////////////////////////////////////////////////////////////////
  /////////// 74HC595(LED表示)Teensy++2.0 〜シフトレジスタ経由 //////////////////
  /////////////////////////////////////////////////////////////////////////////
  //==============================================================================================
  /////////// 12番 74HC595(LED表示)シフトレジスタ F/D ランプ //////////////////
  //==============================================================================================
  const int FD_74HC595_Pin = 5;  //74HC595ピン番号
  FlightSimInteger FD_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 0番 74HC595(LED表示)シフトレジスタ A/T ARM ランプ//////////////////
  //==============================================================================================
  const int AT_ARM_74HC595_Pin = 4;    //74HC595ピン番号
  FlightSimInteger AT_ARM_SwLED;        //データはフロートだが「FlightSimInteger」で大丈夫          
  //==============================================================================================
  /////////// 1番 74HC595(LED表示)シフトレジスタ N1 ランプ//////////////////
  //==============================================================================================
  const int N1_74HC595_Pin = 3;  //74HC595ピン番号
  FlightSimInteger N1_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫  
  //==============================================================================================
  /////////// 2番 74HC595(LED表示)シフトレジスタ SPEED ランプ //////////////////
  //==============================================================================================
  const int SPEED_74HC595_Pin = 2;  //74HC595ピン番号
  FlightSimInteger SPEED_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 3番 74HC595(LED表示)シフトレジスタ VNAV ランプ //////////////////
  //==============================================================================================
  const int VNAV_74HC595_Pin = 1;  //74HC595ピン番号
  FlightSimInteger VNAV_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 4番 74HC595(LED表示)シフトレジスタ LVL CHG ランプ //////////////////
  //==============================================================================================
  const int LVL_CHG_74HC595_Pin = 0;  //74HC595ピン番号
  FlightSimInteger LVL_CHG_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 5番 74HC595(LED表示)シフトレジスタ HDG SEL ランプ //////////////////
  //==============================================================================================
  const int HDG_SEL_74HC595_Pin = 6;  //74HC595ピン番号
  FlightSimInteger HDG_SEL_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 6番 74HC595(LED表示)シフトレジスタ LNAV ランプ //////////////////
  //==============================================================================================
  const int LNAV_74HC595_Pin = 7;  //74HC595ピン番号
  FlightSimInteger LNAV_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 7番 74HC595(LED表示)シフトレジスタ VCR LOC ランプ //////////////////
  //==============================================================================================
  const int VOR_LOC_74HC595_Pin = 8;  //74HC595ピン番号
  FlightSimInteger VOR_LOC_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 8番 74HC595(LED表示)シフトレジスタ APP ランプ //////////////////
  //==============================================================================================
  //8ピンが動作しないので13ピンを使っている。
  const int APP_74HC595_Pin = 9;  //74HC595ピン番号
  FlightSimInteger APP_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 9番 74HC595(LED表示)シフトレジスタ ALT HLD ランプ //////////////////
  //==============================================================================================
  const int ALT_HLD_74HC595_Pin = 10;  //74HC595ピン番号
  FlightSimInteger ALT_HLD_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 10番 74HC595(LED表示)シフトレジスタ V/S ランプ //////////////////
  //==============================================================================================
  const int VS_74HC595_Pin = 11;  //74HC595ピン番号
  FlightSimInteger VS_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  //==============================================================================================
  /////////// 11番 74HC595(LED表示)シフトレジスタ A/P ENGAGE CMD ランプ //////////////////
  //==============================================================================================
  const int AP_ENGAGE_CMD_74HC595_Pin = 12;  //74HC595ピン番号
  FlightSimInteger AP_ENGAGE_CMD_SwLED;     //データはフロートだが「FlightSimInteger」で大丈夫。
  
  
  
  //-----------エンコーダ-------------------------
  //===============================================================================================
  /////////// 15-16番 COURSE エンコーダ //////////////////
  //===============================================================================================
  const int COURSE_EncR_pin = 8;//7
  const int COURSE_EncL_pin = 7;//8

  Encoder COURSE_Enc(COURSE_EncR_pin, COURSE_EncL_pin);
  short COURSE_EncPrev = 0;  //エンコーダの逆回転
  FlightSimInteger COURSE_Encoder;
  //===============================================================================================
  /////////// 17-18番 AirSeed ENC エンコーダ //////////////////
  //===============================================================================================
  const int AirSp_EncR_pin = 10;    //teensy9ピンと繋ぐ
  const int AirSp_EncL_pin = 9;    //teensy10ピンと繋ぐ
  
  Encoder AirSp_Enc(AirSp_EncR_pin, AirSp_EncL_pin);      //エンコーダピン
  short AirSp_EncPrev = 0;
  FlightSimFloat AirSpeed;
  FlightSimInteger AirSpeed_is_mach;
  FlightSimInteger Autopilot_mode;
  //===============================================================================================
  /////////// 19-20番 HEADING エンコーダ //////////////////
  //===============================================================================================
  const int HDG_SEL_EncR_Pin = 17;
  const int HDG_SEL_EncL_Pin = 16;
  
  Encoder HDG_SEL_Enc(HDG_SEL_EncR_Pin, HDG_SEL_EncL_Pin);
  short HDG_SEL_EncPrev = 0;  //エンコーダの逆回転
  FlightSimInteger HDG_SEL_Encoder;
  //===============================================================================================
  /////////// 21-22番 ALTITUDE エンコーダ //////////////////
  //===============================================================================================
  const int ALT_HLD_EncR_Pin = 23;
  const int ALT_HLD_EncL_Pin = 22;
  
  Encoder ALT_HLD_Enc(ALT_HLD_EncR_Pin, ALT_HLD_EncL_Pin);
  short ALT_HLD_EncPrev = 0;  //エンコーダの逆回転
  FlightSimInteger ALT_HLD_Encoder;
  //===============================================================================================
  /////////// 23-24番 VERT SPEED エンコーダ //////////////////
  //===============================================================================================
  const int VS_EncR_Pin = 25;
  const int VS_EncL_Pin = 24;
  
  Encoder VS_Enc(VS_EncR_Pin, VS_EncL_Pin);
  short VS_EncPrev = 0;  //エンコーダの逆回転
  FlightSimInteger VS_Encoder;
  
  
  
  
  
  
   
  
   

void setup() {
  
  /////////////////////////////////////////////////////////////////////////
  /////////// setup内 スイッチ Teensy 直結ピン //////////////////
  /////////////////////////////////////////////////////////////////////////
  //===============================================================================================
  /////////// setup内 0番 F/D トグルスイッチ teensy 0ピン //////////////////
  //===============================================================================================
  pinMode (FDSwPin, INPUT_PULLUP);
  FD_Sw = XPlaneRef("laminar/B738/autopilot/flight_director_toggle");
  FDSwitch.rebounce(500);   //あったほうがいいかも、ご動作するから。
  //===============================================================================================
  /////////// setup内 1番 A/T ARM トグルスイッチ teensy 1ピン //////////////////
  //===============================================================================================
  pinMode(ATarmSwPin, INPUT_PULLUP);                  
  AutoThrottleARM_Sw = XPlaneRef("laminar/B738/autopilot/autothrottle_arm_toggle");
  ATarmSwitch.rebounce(500);
  //===============================================================================================
  /////////// setup内 2番 N1 プッシュスイッチ teensy 2ピン//////////////////
  //===============================================================================================
  pinMode(N1SwPin, INPUT_PULLUP);
  N1_Sw = XPlaneRef("laminar/B738/autopilot/n1_press");
  //===============================================================================================
  /////////// setup内 3番 SPEED プッシュスイッチ teensy 3ピン//////////////////
  //===============================================================================================
  pinMode(SPEEDSwPin, INPUT_PULLUP);
  SPEED_Sw = XPlaneRef("laminar/B738/autopilot/speed_press");
  //===============================================================================================
  /////////// setup内 4番 VNAV プッシュスイッチ teensy 4ピン//////////////////
  //===============================================================================================
  pinMode(VNAVSwPin, INPUT_PULLUP);
  VNAV_Sw = XPlaneRef("laminar/B738/autopilot/vnav_press");
  //===============================================================================================
  /////////// setup内 5番 LVL CHG プッシュスイッチ teensy 5ピン//////////////////
  //===============================================================================================
  pinMode(LVL_CHGSwPin, INPUT_PULLUP);
  LVL_CHG_Sw = XPlaneRef("laminar/B738/autopilot/lvl_chg_press");
  //===============================================================================================
  /////////// setup内 14番 C/O プッシュスイッチ teensy 14ピン//////////////////
  //===============================================================================================
  pinMode(COSwPin, INPUT_PULLUP); 
  CO_Sw = XPlaneRef("laminar/B738/autopilot/change_over_press");
  //===============================================================================================
  /////////// setup内 14番 SPD_INTV プッシュスイッチ teensy 14ピン//////////////////
  //===============================================================================================
  pinMode(SPD_INTVSwPin, INPUT_PULLUP); 
  SPD_INTV_Sw = XPlaneRef("laminar/B738/autopilot/spd_interv_pos");
  //===============================================================================================
  /////////// setup内 14番  プッシュスイッチ teensy 14ピン//////////////////
  //===============================================================================================
  pinMode(COSwPin, INPUT_PULLUP); 
  CO_Sw = XPlaneRef("laminar/B738/autopilot/change_over_press");
  //===============================================================================================
  /////////// setup内 6番 HDG SEL プッシュスイッチ teensy 6ピン//////////////////
  //===============================================================================================
  pinMode(HDG_SELSwPin, INPUT_PULLUP);
  HDG_SEL_Sw = XPlaneRef("laminar/B738/autopilot/hdg_sel_press");
  //===============================================================================================
  /////////// setup内 Part-B LNAV プッシュスイッチ teensy 7ピン//////////////////
  //============================================================================================
  pinMode(LNAVSwPin, INPUT_PULLUP); 
  LNAV_Sw = XPlaneRef("laminar/B738/autopilot/lnav_press");
  //===============================================================================================
  /////////// setup内 Part-B VOR LOC プッシュスイッチ teensy 8ピン//////////////////
  //============================================================================================
  pinMode(VOR_LOCSwPin, INPUT_PULLUP); 
  VOR_LOC_Sw = XPlaneRef("laminar/B738/autopilot/vorloc_press");
  //===============================================================================================
  /////////// setup内 Part-B APP プッシュスイッチ teensy 9ピン//////////////////
  //============================================================================================
  pinMode(APPSwPin, INPUT_PULLUP); 
  APP_Sw = XPlaneRef("laminar/B738/autopilot/app_press");
  //===============================================================================================
  /////////// setup内 Part-B HDG BANK ANGLE 切り替えスイッチ //////////////////
  //===============================================================================================
  pinMode(BankAngle_up_SwPin, INPUT_PULLUP);
  BankAngle_up = XPlaneRef("laminar/B738/autopilot/bank_angle_up");
  pinMode(BankAngle_dn_SwPin, INPUT_PULLUP);
  BankAngle_dn = XPlaneRef("laminar/B738/autopilot/bank_angle_dn");
  //===============================================================================================
  /////////// setup内 10番 ALT HOLD プッシュスイッチ teensy 10ピン//////////////////
  //==============================================================================================
  pinMode(ALT_HOLDSwPin, INPUT_PULLUP);
  ALT_HOLD_Sw = XPlaneRef("laminar/B738/autopilot/alt_hld_press");
  //===============================================================================================
  /////////// setup内 11番 V/S プッシュスイッチ teensy 11ピン//////////////////
  //===============================================================================================
  pinMode(VSSwPin, INPUT_PULLUP); 
  VS_Sw = XPlaneRef("laminar/B738/autopilot/vs_press");
  //===============================================================================================
  /////////// setup内 12番 A/P ENGAGE CMD プッシュスイッチ teensy 12ピン//////////////////
  //===============================================================================================
  pinMode(AP_ENGAGE_CMDSwPin, INPUT_PULLUP); 
  AP_ENGAGE_CMD_Sw = XPlaneRef("laminar/B738/autopilot/cmd_a_press");
  //===============================================================================================
  /////////// setup内 13番 DISENGAGE プッシュスイッチ teensy 13ピン//////////////////
  //===============================================================================================
  pinMode(DISENGAGESwPin, INPUT_PULLUP); 
  DISENGAGE_Sw = XPlaneRef("laminar/B738/autopilot/disconnect_toggle");
  //===============================================================================================
  /////////// setup内 14番 ALT_INTV プッシュスイッチ teensy 14ピン//////////////////
  //===============================================================================================
  pinMode(ALT_INTVSwPin, INPUT_PULLUP); 
  ALT_INTV_Sw = XPlaneRef("laminar/B738/autopilot/alt_interv_pos");
  
  
  
  
  
  
  /////////////////////////////////////////////////////////////////////////
  // setup内 LEDピン Teensy++2.0 〜 74HC595 シフトレジスタ 経由 /////////////
  /////////////////////////////////////////////////////////////////////////
  //setup内LEDランプ共通---------74HC595のピン設定
  pinMode(SER_dataPin, OUTPUT);
  pinMode(RCLK_latchPin, OUTPUT);
  pinMode(SRCLK_clockPin, OUTPUT);
  //setup内LEDランプ共通---------すべてのレジスタピンをリセット
  clearRegisters();
  writeRegisters();
  //===============================================================================================
  /////////// setup内 74HC595(LED表示)シフトレジスタ F/D MAランプ //////////////////
  //===============================================================================================
  FD_SwLED = XPlaneRef("laminar/B738/autopilot/master_capt_status");  //laminar/B738/autopilot/flight_director_pos
    FD_SwLED.onChange(update_FD_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595(LED表示)シフトレジスタ A/T ARM ランプ //////////////////
  //===============================================================================================
  AT_ARM_SwLED = XPlaneRef("laminar/B738/autopilot/autothrottle_status");
    AT_ARM_SwLED.onChange(update_AT_ARM_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595(LED表示)シフトレジスタ N1 ランプ //////////////////
  //===============================================================================================
  N1_SwLED = XPlaneRef("laminar/B738/autopilot/n1_status");
    N1_SwLED.onChange(update_N1_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595(LED表示)シフトレジスタ SPEED ランプ //////////////////
  //===============================================================================================
  SPEED_SwLED = XPlaneRef("laminar/B738/autopilot/speed_status1");
    SPEED_SwLED.onChange(update_SPEED_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595(LED表示)シフトレジスタ VNAV ランプ //////////////////
  //===============================================================================================
  VNAV_SwLED = XPlaneRef("laminar/B738/autopilot/vnav_status1");
    VNAV_SwLED.onChange(update_VNAV_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595(LED表示)シフトレジスタ LVL CHG ランプ //////////////////
  //===============================================================================================
  LVL_CHG_SwLED = XPlaneRef("laminar/B738/autopilot/lvl_chg_status");
    LVL_CHG_SwLED.onChange(update_LVL_CHG_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595(LED表示)シフトレジスタ HDG SEL ランプ //////////////////
  //===============================================================================================
  HDG_SEL_SwLED = XPlaneRef("laminar/B738/autopilot/hdg_sel_status");
    HDG_SEL_SwLED.onChange(update_HDG_SEL_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595(LED表示)シフトレジスタ LNAV ランプ //////////////////
  //===============================================================================================
  LNAV_SwLED = XPlaneRef("laminar/B738/autopilot/lnav_status");
    LNAV_SwLED.onChange(update_LNAV_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595(LED表示)シフトレジスタ VOR LOC ランプ //////////////////
  //===============================================================================================
  VOR_LOC_SwLED = XPlaneRef("laminar/B738/autopilot/vorloc_status");
    VOR_LOC_SwLED.onChange(update_VOR_LOC_SwLED);
  //===============================================================================================.
  /////////// setup内 74HC595(LED表示)シフトレジスタ APP ランプ //////////////////
  //===============================================================================================
  APP_SwLED = XPlaneRef("laminar/B738/autopilot/app_status");
    APP_SwLED.onChange(update_APP_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595(LED表示)シフトレジスタ ALT HOLD ランプ //////////////////
  //===============================================================================================
  ALT_HLD_SwLED = XPlaneRef("laminar/B738/autopilot/alt_hld_status");
    ALT_HLD_SwLED.onChange(update_ALT_HLD_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595(LED表示)シフトレジスタ V/S ランプ //////////////////
  //===============================================================================================
  VS_SwLED = XPlaneRef("laminar/B738/autopilot/vs_status");
    VS_SwLED.onChange(update_VS_SwLED);
  //===============================================================================================
  /////////// setup内 74HC595(LED表示)シフトレジスタ A/P ENGAGE CMD ランプ //////////////////
  //===============================================================================================
  AP_ENGAGE_CMD_SwLED = XPlaneRef("laminar/B738/autopilot/cmd_a_status");
    AP_ENGAGE_CMD_SwLED.onChange(update_AP_ENGAGE_CMD_SwLED);
    
  
  
  
  //-----------エンコーダ-------------------------
  //===============================================================================================
  /////////// setup内 15-16番 COURSE エンコーダ  //////////////////
  //===============================================================================================
  pinMode(COURSE_EncR_pin, INPUT_PULLUP);  //エンコーダ
  pinMode(COURSE_EncL_pin, INPUT_PULLUP);  //エンコーダ
  COURSE_Encoder = XPlaneRef("sim/cockpit2/radios/actuators/hsi_obs_deg_mag_pilot");
  //===============================================================================================
  /////////// setup内 17-18番 IAS/MACH(AirSpeed) エンコーダ  //////////////////
  //===============================================================================================
  pinMode(AirSp_EncR_pin, INPUT_PULLUP);  //エンコーダ
  pinMode(AirSp_EncL_pin, INPUT_PULLUP);  //エンコーダ
  AirSpeed = XPlaneRef("sim/cockpit/autopilot/airspeed");
  AirSpeed_is_mach = XPlaneRef("sim/cockpit/autopilot/airspeed_is_mach");
  Autopilot_mode = XPlaneRef("sim/cockpit/autopilot/autopilot_mode");
  //===============================================================================================
  /////////// setup内 19-20番 HEADING エンコーダ  //////////////////
  //=============================================================================================== 
  pinMode(HDG_SEL_EncR_Pin, INPUT_PULLUP);  //エンコーダ
  pinMode(HDG_SEL_EncL_Pin, INPUT_PULLUP);  //エンコーダ
  HDG_SEL_Encoder = XPlaneRef("sim/cockpit2/autopilot/heading_dial_deg_mag_pilot");
  //===============================================================================================
  /////////// setup内 21-22番 ALTTUDE エンコーダ //////////////////
  //===============================================================================================
  pinMode(ALT_HLD_EncR_Pin, INPUT_PULLUP);  //エンコーダ
  pinMode(ALT_HLD_EncL_Pin, INPUT_PULLUP);  //エンコーダ
  ALT_HLD_Encoder = XPlaneRef("sim/cockpit2/autopilot/altitude_dial_ft");
  //===============================================================================================
  /////////// setup内 23-24番 VERT SPEED エンコーダ //////////////////
  //===============================================================================================
  pinMode(VS_EncR_Pin, INPUT_PULLUP);  //エンコーダ
  pinMode(VS_EncL_Pin, INPUT_PULLUP);  //エンコーダ
  VS_Encoder = XPlaneRef("sim/cockpit/autopilot/vertical_velocity");
}





void loop() {
  FlightSim.update();
  
  /////////////////////////////////////////////////////////////////////////
  // loop内 74HC595 シフトレジスタ 共通 //
  /////////////////////////////////////////////////////////////////////////
  writeRegisters();  //変更内容を表示するために呼び出さなければなりません
                     //必要な値が設定された後に一度だけ呼び出します。
  //////// loop内 シフトレジスタ 共通 END ///////////////////////////////////
  
  //ループ内には74HC595 シフトレジスタに関して、これ以外の設定項目は無い、全て関数設定になっている。
  
  
  
  
  /////////////////////////////////////////////////////////////////////////
  /////////// loop内 スイッチ Teensy 直結ピン //////////////////
  /////////////////////////////////////////////////////////////////////////
  //==============================================================================================
  /////////// loop内 0番 FlightDirector トグルスイッチ(コマンド)//////////////////
  //============================================================================================== 
  FDSwitch.update();
  if (FDSwitch.fallingEdge()) {
    FD_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (FDSwitch.risingEdge()) {
    FD_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 1番 A/T ARM (AutoThrottle ARM) トグルスイッチ(コマンド)//////////////////
  //==============================================================================================
  ATarmSwitch.update();
  if (ATarmSwitch.fallingEdge()) {
    AutoThrottleARM_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (ATarmSwitch.risingEdge()) {
    AutoThrottleARM_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 2番 N1 プッシュスイッチ(コマンド) //////////////////
  //==============================================================================================
  N1Switch.update();
  if (N1Switch.fallingEdge()) {
    N1_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (N1Switch.risingEdge()) {
    N1_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 3番 SPEED プッシュスイッチ(コマンド) //////////////////
  //==============================================================================================
  SPEEDSwitch.update();
  if (SPEEDSwitch.fallingEdge()) {
    SPEED_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (SPEEDSwitch.risingEdge()) {
    SPEED_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 4番 VNAV プッシュスイッチ(コマンド) //////////////////
  //==============================================================================================
  VNAVSwitch.update();
  if (VNAVSwitch.fallingEdge()) {
    VNAV_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (VNAVSwitch.risingEdge()) {
    VNAV_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 5番 LVL CHG プッシュスイッチ(コマンド) //////////////////
  //==============================================================================================
  LVL_CHGSwitch.update();
  if (LVL_CHGSwitch.fallingEdge()) {
    LVL_CHG_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (LVL_CHGSwitch.risingEdge()) {
    LVL_CHG_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 14番 C/O プッシュスイッチ(コマンド) //////////////////
  //==============================================================================================
  COSwitch.update();
  if (COSwitch.fallingEdge()) {
    CO_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (COSwitch.risingEdge()) {
    CO_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 14番 SPD_INTV プッシュスイッチ(コマンド) //////////////////
  //==============================================================================================
  SPD_INTVSwitch.update();
  if (SPD_INTVSwitch.fallingEdge()) {
    SPD_INTV_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (SPD_INTVSwitch.risingEdge()) {
    SPD_INTV_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 6番 HDG SEL プッシュスイッチ(コマンド) //////////////////
  //==============================================================================================
  HDG_SELSwitch.update();
  if (HDG_SELSwitch.fallingEdge()) {
    HDG_SEL_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (HDG_SELSwitch.risingEdge()) {
    HDG_SEL_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 Part-B LNAV プッシュスイッチ(コマンド) //////////////////
  //==============================================================================================
  LNAVSwitch.update();
  if (LNAVSwitch.fallingEdge()) {
    LNAV_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (LNAVSwitch.risingEdge()) {
    LNAV_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 Part-B VOR LOC プッシュスイッチ(コマンド) //////////////////
  //==============================================================================================
  VOR_LOCSwitch.update();
  if (VOR_LOCSwitch.fallingEdge()) {
    VOR_LOC_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (VOR_LOCSwitch.risingEdge()) {
    VOR_LOC_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 Part-B APP プッシュスイッチ(コマンド) //////////////////
  //==============================================================================================
  APPSwitch.update();
  if (APPSwitch.fallingEdge()) {
    APP_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (APPSwitch.risingEdge()) {
    APP_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 Part-B BANK ANGLE 6モード切り替え スイッチ //////////////////
  //==============================================================================================
  BankAngle_up_SwitchPin.update();
  if (BankAngle_up_SwitchPin.fallingEdge()) {
    BankAngle_up = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (BankAngle_up_SwitchPin.risingEdge()) {
    BankAngle_up = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  
  BankAngle_dn_SwitchPin.update();
  if (BankAngle_dn_SwitchPin.fallingEdge()) {
    BankAngle_dn = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (BankAngle_dn_SwitchPin.risingEdge()) {
    BankAngle_dn = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 10番パネル ALT HOLD プッシュスイッチ(コマンド) //////////////////
  //==============================================================================================
  ALT_HOLDSwitch.update();
  if (ALT_HOLDSwitch.fallingEdge()) {
    ALT_HOLD_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (ALT_HOLDSwitch.risingEdge()) {
    ALT_HOLD_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 11番 V/S プッシュスイッチ(コマンド) //////////////////
  //==============================================================================================
  VSSwitch.update();
  if (VSSwitch.fallingEdge()) {
    VS_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (VSSwitch.risingEdge()) {
    VS_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 12番 A/P ENGAGE CMD プッシュスイッチ(コマンド) //////////////////
  //==============================================================================================
  AP_ENGAGE_CMDSwitch.update();
  if (AP_ENGAGE_CMDSwitch.fallingEdge()) {
    AP_ENGAGE_CMD_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (AP_ENGAGE_CMDSwitch.risingEdge()) {
    AP_ENGAGE_CMD_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 12番 DESENGADE プッシュスイッチ(コマンド) //////////////////
  //==============================================================================================
  DISENGAGESwitch.update();
  if (DISENGAGESwitch.fallingEdge()) {
    DISENGAGE_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (DISENGAGESwitch.risingEdge()) {
    DISENGAGE_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  //==============================================================================================
  /////////// loop内 14番 ALT_INTV プッシュスイッチ(コマンド) //////////////////
  //==============================================================================================
  ALT_INTVSwitch.update();
  if (ALT_INTVSwitch.fallingEdge()) {
    ALT_INTV_Sw = 1;        //押し下げしたときを検出してONにする
    inactivityTimeout = 0;
  }
  if (ALT_INTVSwitch.risingEdge()) {
    ALT_INTV_Sw = 0;        //押し上げしたときを検出状態(プッシュボタンは1にしてONを保つ必要がある)
  }
  
  
  
  
  
  
  //-----------エンコーダ-------------------------
  //==============================================================================================
  /////////// loop内 15-16番 COURSE エンコーダ //////////////////
  //==============================================================================================
  // 1クリックで4つ変化するので4で割って1つずつカウントするようにする
  short COURSE_EncDiff = (COURSE_Enc.read() - COURSE_EncPrev) / 4;
   
  if (COURSE_EncDiff) {
    // only update prev when we've reached a detent!
    //戻り止めに達した場合にのみPREVを更新!
    COURSE_EncPrev = 0;
    COURSE_Enc.write(0);
   
    // datarefを一時的な値にコピー
    float Course_tmp = COURSE_Encoder;
 
    // 一時的な値に変更を適用
    Course_tmp += COURSE_EncDiff;
    
    // do range checking(範囲チェックを行う)
    while (Course_tmp < 0.0) Course_tmp += 360.0;
    while (Course_tmp >= 360.0) Course_tmp -= 360.0;
 
    // datarefへ検証された新しいエアースピードの数値を書く
    COURSE_Encoder = Course_tmp;
  }
  
  //==============================================================================================
  /////////// loop内 17-18番 IAS/MACH エンコーダ //////////////////
  //==============================================================================================
  // エンコーダの動きを見る
  short AirSp_EncDiff = AirSp_Enc.read() /4;  //粗いの変更したエンコーダを読む- 変更前のエンコーダの値
     
  // それらが移動した後のエンコーダをリセット
  if (AirSp_EncDiff) {
    AirSp_EncPrev = 0;
    AirSp_Enc.write(0);
  }
   
  // encDiffは20にmyEncDiffの値(1カウント)を掛ける値になる
  int AirSpeed_mach_encDiff = 20 * AirSp_EncDiff;  //20 ✕ 1 で encDiff は20になる
   
  //ノットは、autopilot_modeが「0」で000〜392とautopilot_modeが「1」で114〜392の範囲、マッハは0.00〜0.84の範囲で動作するように設定する必要がある。
  //ノット表示
  if (AirSpeed_is_mach == 0 && (Autopilot_mode == 0 || Autopilot_mode == 1)) { 
      //小数点以下2桁からカウントアップ/ダウンを行う  
      if (AirSpeed_mach_encDiff) {      //もし20なら  
          float tmp = AirSpeed;  //tmpはX-Planeからの周波数の値を取得
           
          // encDiffは20だから ✕ 0.05で1ずつカウント(1桁からカウント)となり、その値を周波数にプラスする
          tmp += AirSpeed_mach_encDiff * 0.05; 
          while (tmp < 0) tmp += 1;  //エアスピードが 100 より小さい場合は 1 をプラスする(つまり100で止まる)
          while (tmp >= 392) tmp -= 1;  //エアスピードが 400 より大きい場合は 1 をマイナスする(つまり399で止まる) 
          AirSpeed = tmp;
          //数値の範囲はX-Plane側で処理しているのでいらない
      }
  }
  //ノット表示
  
  if (AirSpeed_is_mach == 0 && (Autopilot_mode == 0 || Autopilot_mode == 2)) {   //&& = 両方同じなら
      //小数点以下2桁からカウントアップ/ダウンを行う  
      if (AirSpeed_mach_encDiff) {      //もし20なら  
          float tmp = AirSpeed;  //tmpはX-Planeからの周波数の値を取得
           
          // encDiffは20だから ✕ 0.05で1ずつカウント(1桁からカウント)となり、その値を周波数にプラスする
          tmp += AirSpeed_mach_encDiff * 0.05; 
          while (tmp < 100) tmp += 1;  //エアスピードが 100 より小さい場合は 1 をプラスする(つまり100で止まる)
          while (tmp >= 392) tmp -= 1;  //エアスピードが 400 より大きい場合は 1 をマイナスする(つまり399で止まる) 
          AirSpeed = tmp;
          //数値の範囲はX-Plane側で処理しているのでいらない
      }
  }
 
  //マッハ表示
  if (AirSpeed_is_mach == 1) { 
      //小数点以下2桁からカウントアップ/ダウンを行う  
      if (AirSpeed_mach_encDiff) {      //もし20なら  
          float tmp = AirSpeed;  //tmpはX-Planeからの周波数の値を取得
           
          // encDiffは20だから ✕ 0.00005で0.01ずつカウント(小数点以下2桁からカウント)となり、その値を周波数にプラスする
          tmp += AirSpeed_mach_encDiff * 0.0005;  
          while (tmp < -0.01) tmp += 0.01;  //tmpが0より小さくなった場合、8をプラスする(つまり7になる)
          while (tmp >= 0.84) tmp -= 0.01;  //tmpが8以上になった場合、8を引く(つまり0になる)
          AirSpeed = tmp;
          //数値の範囲はX-Plane側で処理しているのでいらない
      }
  }
  

  

  //==============================================================================================
  /////////// loop内 19-20番 HEADING エンコーダ //////////////////
  //==============================================================================================
  // 1クリックで4つ変化するので4で割って1つずつカウントするようにする
  short HDG_SEL_EncDiff = (HDG_SEL_Enc.read() - HDG_SEL_EncPrev) / 4;
   
  if (HDG_SEL_EncDiff) {
    // only update prev when we've reached a detent!
    //戻り止めに達した場合にのみPREVを更新!
    HDG_SEL_EncPrev = 0;
    HDG_SEL_Enc.write(0);

    float HDG_SEL_tmp = HDG_SEL_Encoder;  // datarefを一時的な値にコピー
    HDG_SEL_tmp += HDG_SEL_EncDiff;       // 一時的な値に変更を適用
    HDG_SEL_Encoder = HDG_SEL_tmp;        // datarefへ検証された新しいエアースピードの数値を書く
  }
  //==============================================================================================
  /////////// loop内 21-22番パネル ALTITUDE エンコーダ //////////////////
  //==============================================================================================

  // 1クリックで4つ変化するので4で割って1つずつカウントするようにする
  short ALT_HLD_EncDiff = (ALT_HLD_Enc.read() - ALT_HLD_EncPrev) *100 / 4;
  if (ALT_HLD_EncDiff) {
    ALT_HLD_EncPrev = 0;
    ALT_HLD_Enc.write(0);
    
    float ALT_HLD_tmp = ALT_HLD_Encoder;
    ALT_HLD_tmp += ALT_HLD_EncDiff;
    while (ALT_HLD_tmp < -1000) ALT_HLD_tmp += 1;    //エンコーダの回転による数値を-1000以上にならないように制限する。
    while (ALT_HLD_tmp >= 99900) ALT_HLD_tmp -= 1;  //エンコーダの数値を99900までに制限する(実際は000000になるので7セグの方で000000になるように設定する必要がある)。
    ALT_HLD_Encoder = ALT_HLD_tmp;
  }
  //==============================================================================================
  /////////// loop内 23-24番 VERT SPEED エンコーダ //////////////////
  //==============================================================================================
  // 1クリックで4つ変化するので4で割って1つずつカウントするようにする
  short VS_EncDiff = (VS_Enc.read() - VS_EncPrev) *100 / 4;
  if (VS_EncDiff) {
    VS_EncPrev = 0;
    VS_Enc.write(0);
    
    float VS_tmp = VS_Encoder;
    VS_tmp += VS_EncDiff;
    VS_Encoder = VS_tmp;
  }
}
// ループEND



  ////////////////////////////////////////////////////////////////////////////////
  /////////// 関数 LEDピン Teensy++2.0 〜 74HC595(出力)シフトレジスタ経由 ///////////
  ////////////////////////////////////////////////////////////////////////////////
  //==============================================================================================
  /////////// 関数 74HC595(LED表示)シフトレジスタ F/D ランプ //////////////////
  //==============================================================================================
  void update_FD_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(FD_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(FD_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595(LED表示)シフトレジスタ A/T ARM ランプ //////////////////
  //==============================================================================================
  void update_AT_ARM_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(AT_ARM_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(AT_ARM_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595(LED表示)シフトレジスタ  N1 ランプ //////////////////
  //==============================================================================================
  void update_N1_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(N1_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(N1_74HC595_Pin, LOW);    //点灯
    }
  }
  
  //==============================================================================================
  /////////// 関数 74HC595(LED表示)シフトレジスタ SPEED ランプ //////////////////
  //==============================================================================================
  void update_SPEED_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(SPEED_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(SPEED_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595(LED表示)シフトレジスタ VNAV ランプ //////////////////
  //==============================================================================================
  void update_VNAV_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(VNAV_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(VNAV_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595(LED表示)シフトレジスタ LVL CHG ランプ //////////////////
  //==============================================================================================
  void update_LVL_CHG_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(LVL_CHG_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(LVL_CHG_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595(LED表示)シフトレジスタ HDG SEL ランプ //////////////////
  //==============================================================================================
  void update_HDG_SEL_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(HDG_SEL_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(HDG_SEL_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595(LED表示)シフトレジスタ LNAV ランプ //////////////////
  //==============================================================================================
  void update_LNAV_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(LNAV_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(LNAV_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595(LED表示)シフトレジスタ VOR LOC ランプ //////////////////
  //==============================================================================================
  void update_VOR_LOC_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(VOR_LOC_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(VOR_LOC_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595(LED表示)シフトレジスタ APP ランプ //////////////////
  //==============================================================================================
  void update_APP_SwLED(long value) {
    if (value == 1 || value == 2)  {
      setRegisterPin(APP_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(APP_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595(LED表示)シフトレジスタ ALT HOLD ランプ //////////////////
  //==============================================================================================
  void update_ALT_HLD_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(ALT_HLD_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(ALT_HLD_74HC595_Pin, LOW);    //点灯
    }
  }
  //==============================================================================================
  /////////// 関数 74HC595(LED表示)シフトレジスタ V/S ランプ //////////////////
  //==============================================================================================
  void update_VS_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(VS_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(VS_74HC595_Pin, LOW);    //点灯
    }
  }
 //===============================================================================================
  /////////// 関数 74HC595(LED表示)シフトレジスタ A/P ENGAGE CMD ランプ //////////////////
  //==============================================================================================
  void update_AP_ENGAGE_CMD_SwLED(long value) {
    if (value == 1)  {
      setRegisterPin(AP_ENGAGE_CMD_74HC595_Pin, HIGH);    //消灯
    } else {
      setRegisterPin(AP_ENGAGE_CMD_74HC595_Pin, LOW);    //点灯
    }
  }